import tornado
import tornado.options
from tornado.web import RequestHandler


'''
装饰器@tornado.web.authenticated的判断执行依赖于请求处理类中的self.current_user属性，
如果current_user值为假（None、False、0、""等），
任何GET或HEAD请求都将把访客重定向到应用设置中login_url指定的URL，
而非法用户的POST请求将返回一个带有403（Forbidden）状态的HTTP响应。

在获取self.current_user属性的时候，tornado会调用get_current_user()方法来返回current_user的值。
也就是说，我们验证用户的逻辑应写在get_current_user()方法中，若该方法返回非假值则验证通过，否则验证失败。

'''


class IndexHandler(RequestHandler):
    pass


class ProfileHandler(RequestHandler):
    pass

class LoginHandler(RequestHandler):
    def get(self):
        """登陆处理，完成登陆后跳转回前一页面"""
        next = self.get_argument("next", "/")
        self.redirect(next+"?name=logined")


class ProfileHandler(RequestHandler):
    def get_current_user(self):
        """在此完成用户的认证逻辑"""
        user_name = self.get_argument("name", None)
        return user_name

    @tornado.web.authenticated
    def get(self):
        self.write("这是我的个人主页。")


app = tornado.web.Application(
    [
        (r"/", IndexHandler),
        (r"/profile", ProfileHandler),
        (r"/login", LoginHandler),
    ],
    # "login_url":"/login"
)

if __name__ == "__main__":
    tornado.options.parse_command_line()
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

